#include "pch.hpp"
#include "UiEditWindow.hpp"

using namespace Engine;
using namespace Engine::Edit;




UiEditWindow::UiEditWindow(UiDefinition::ptr uiDefinition, QWidget* parent)
	: DocumentWindow(uiDefinition, parent)
	, m_uiDefinition(uiDefinition)
{
	ui.setupUi(this);


	//
	// TextEdit
	//

	m_highlighter = boost::make_shared<CssHighlighter>(ui.textEdit->document(), m_errors);
	QFont font = m_highlighter->font();
	ui.textEdit->setTabStopWidth(font.pointSize() * 3);
	ui.textEdit->setFocus(Qt::OtherFocusReason);

	//
	// LineView
	//

	ui.numberView->setTextEdit(ui.textEdit);
	ui.numberView->setHasBreakpoints(false);


	//
	// Signals
	//

	verify(connect(ui.textEdit, SIGNAL(textChanged()), SLOT(onTextChanged())));

	setTitle();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

UiEditWindow::~UiEditWindow()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




UiDefinition::ptr UiEditWindow::uiDefinition() const
{
	return m_uiDefinition;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QString UiEditWindow::contents() const
{
	return ui.textEdit->document()->toPlainText();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void UiEditWindow::save()
{
	
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void UiEditWindow::onTextChanged()
{
	QString text = contents();

	// We must compare the plain text against the stored one:
	// textChanged is emitted when the Highlighter kicks in, but
	// this does not quality for a modified document
	if(text != m_uiDefinition->cssContent())
	{
		setWindowModified(true);
		emit modified(this);
	}
	// If the user changes the text back to the state it had before the last
	// save, then the document is not modified
	else
	{
		setWindowModified(false);
		emit modified(this);
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////